package Capa_Presentacion;

import java.util.Calendar;

import java.util.Date;
import java.util.ArrayList;
import java.util.List;


import Capa_Datos.CD_Horario;
import Capa_Datos.CD_Laboratorio;
import Capa_Negocio.CN_Horario;
import Capa_Negocio.CN_ImplHorario;
import Capa_Negocio.CN_ImplLaboratorio;
import Capa_Negocio.CN_Laboratorio;

public class CP_ConsulDisp {
	
	private Date dateConsul=null;//capturar fecha del calendar
	private Date horaConsul;
	private int labObtenido;
	
	private ArrayList<CD_Horario> listaHorario;//lista de horarios
	private ArrayList<CD_Laboratorio> listaLabDisp;//laboratorios Disponibles
	private ArrayList<Integer> listaLab=new ArrayList<Integer>();//lista de laboratorios de la fisi
	
	private CN_Horario HorariosLab;// capa presentacion para acceder a la lista de horarios
	private CN_Laboratorio labN;//capa presentacion para lista de laboratorios fisi
	
	private ArrayList<String> Semana=new  ArrayList<String>();
	private String diaDisponible;//dia que requiere para la consulta
	
	public CP_ConsulDisp(){
		
		Semana=new ArrayList<String>();
		semanas();
		listaLabDisp=new ArrayList<CD_Laboratorio>();
		HorariosLab=new CN_ImplHorario();
		dateConsul=null;
		labN=new CN_ImplLaboratorio();
		listaLab=new ArrayList<Integer>();
		ListaLaboratorio();
		listaHorario= new ArrayList<CD_Horario>();
	}
	
	public void semanas(){
		this.Semana.add("Lunes");
		this.Semana.add("Martes");
		this.Semana.add("Miercoles");
		this.Semana.add("Jueves");
		this.Semana.add("Viernes");
		this.Semana.add("Sabado");
	}
	public String verificarDos(Date fecha){
			String diaS="";
			Calendar dia=Calendar.getInstance();
			dia.setTime(fecha);
			switch (dia.get(Calendar.DAY_OF_WEEK)) {
			case 1: diaS="Domingo";
						break;
			case 2: diaS="Lunes";
			break;
			case 3: diaS="Martes";
			break;
			case 4: diaS="Miercoles";
			break;
			case 5: diaS="Jueves";
			break;
			case 6: diaS="Viernes";
			break;
			case 7: diaS="Sabado";
			break;

			default:
				break;
			}
			System.out.print(dia.get(Calendar.DAY_OF_WEEK)+"+ "+diaS);
			return diaS;
	}
	
	public void ListaLaboratorio(){
		System.out.print("entre lab");
		List<CD_Laboratorio> lista=labN.obtenerListaLab();
		for(CD_Laboratorio labC : lista){
	    this.listaLab.add(labC.getIdLaboratorio());
		}
	}
	public void ListaLabDisponibles(){
		listaHorario.clear();
		setDiaDisponible("");
		setDiaDisponible(verificarDos(dateConsul));
		System.out.print(diaDisponible);
		List<CD_Horario> lista =HorariosLab.obtenerHorario(labObtenido);
		System.out.println("entre  lsta horario");
		for(CD_Horario horarLab : lista){
			this.listaHorario.add(horarLab);
			System.out.println("lab: "+ horarLab.getLaboratorio());
			System.out.println("dia: "+ horarLab.getDia());
		}
		obtenerLabDisp(ordenarHorario(listaHorario));
		//listaHorario=(ArrayList<CD_Horario>) ordenarHorario(listaHorario);
	}
	@SuppressWarnings("deprecation")
	public void obtenerLabDisp(List<CD_Horario> list){
		List<CD_Horario> listhorariodisp= new ArrayList<CD_Horario>();
		Date horaAI,horaAF,horaC;
		horaC=horaConsul;
		
		Calendar horaAIC = Calendar.getInstance(),horaAFC=Calendar.getInstance(),horaCC= Calendar.getInstance();
		horaAIC.set(Calendar.HOUR,8);
		horaCC.setTime(horaC);
		
		for(int i=0;i< list.size();i++){
			horaAI=list.get(i).getHoraI();
			horaAIC.setTime(horaAI);
			
			horaAF=list.get(i).getHoraF();
			horaAFC.setTime(horaAF);
			CD_Horario objhorario=new CD_Horario();
			if(horaAIC.getTime().getHours()>horaCC.getTime().getHours()){
				
				objhorario.getHoraI().setTime(horaAIC.getTimeInMillis());
				objhorario.getHoraF().setTime(horaAFC.getTimeInMillis());
				listhorariodisp.set(i, objhorario);
			}else{
				if(horaAFC.getTime().getHours()>horaCC.getTime().getHours()){
					objhorario.getHoraI().setTime(horaAFC.getTimeInMillis());
					
				}
			}
			
		}
	}
	@SuppressWarnings("deprecation")
	public List<CD_Horario> ordenarHorario(List<CD_Horario> listhorario){
		List<CD_Horario> listordenada=new ArrayList<CD_Horario>();
		
		CD_Horario aux1;
		aux1=new CD_Horario();
		listordenada=listhorario;
		for(int i=1;i< listhorario.size();i++){
			for(int j=0;j<listhorario.size()-1;j++){
				Calendar hora=Calendar.getInstance();
				Calendar horaf=Calendar.getInstance();
				
				hora.setTime(listordenada.get(j).getHoraI());
				System.out.println("hora incial "+hora.getTime().getHours());
				
				horaf.setTime(listordenada.get(j+1).getHoraI());
				System.out.println("hora final "+horaf.getTime().getHours());
				
				if(hora.getTime().getHours()>horaf.getTime().getHours()){
					aux1=listordenada.get(j);
					listordenada.set(j, listordenada.get(j+1));
					listordenada.set(j+1, aux1);
				}
				
			}
		}
		
		return listordenada;
	}
	
	
	
	public ArrayList<CD_Laboratorio> getListaLabDisp() {
		return listaLabDisp;
	}

	public void setListaLabDisp(ArrayList<CD_Laboratorio> listaLabDisp) {
		this.listaLabDisp = listaLabDisp;
	}

	
	public Date getHoraConsul() {
		return horaConsul;
	}

	public void setHoraConsul(Date horaConsul) {
		this.horaConsul = horaConsul;
	}

	public Date getDateConsul() {
		return dateConsul;
	}
	public void setDateConsul(Date dateConsul) {
		this.dateConsul = dateConsul;
	}

	public CN_Horario getHorariosLab() {
		return HorariosLab;
	}

	public void setHorariosLab(CN_Horario horariosLab) {
		HorariosLab = horariosLab;
	}


	public CN_Laboratorio getLabN() {
		return labN;
	}

	public void setLabN(CN_Laboratorio labN) {
		this.labN = labN;
	}
	public ArrayList<Integer> getListaLab() {
		return listaLab;
	}
	public void setListaLab(ArrayList<Integer> listaLab) {
		this.listaLab = listaLab;
	}
	

	public ArrayList<String> getSemana() {
		return Semana;
	}


	public void setSemana(ArrayList<String> semana) {
		Semana = semana;
	}

	public String getDiaDisponible() {
		return diaDisponible;
	}

	public void setDiaDisponible(String diaDisponible) {
		this.diaDisponible = diaDisponible;
	}

	public ArrayList<CD_Horario> getListaHorario() {
		return listaHorario;
	}

	public void setListaHorario(ArrayList<CD_Horario> listaHorario) {
		this.listaHorario = listaHorario;
	}

	public int getLabObtenido() {
		return labObtenido;
	}

	public void setLabObtenido(int labObtenido) {
		this.labObtenido = labObtenido;
	}



	
	
}
